package com.itany.corejava.code06_面向对象.多态;

/**
 * @author 石小俊
 * @date 2024年01月16日 15:59
 */
public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("我是一个人");
    }

}

class Man extends Person {
    private double salary;

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void show() {
        System.out.println("我是一个男人");
    }

    public void work() {
        System.out.println("我需要工作用于赚钱养家,工资:" + salary);
    }
}

class WoMan extends Person {
    private int appearance;

    public int getAppearance() {
        return appearance;
    }

    public void setAppearance(int appearance) {
        this.appearance = appearance;
    }

    public void show() {
        System.out.println("我是一个女人");
    }

    public void shopping() {
        System.out.println("我需要貌美如花,没事逛逛街,购购物,颜值:" + appearance);
    }
}

class Test {
    public static void main(String[] args) {
        // 父类的引用指向了子类的对象
        // 此时Person是编译时类型,Man是运行时类型
        // Person是Man的父类
        // 自动类型转换
        Person person = new Man();
        person.show();
        // 强制类型转换
        // 在转换时可能会报错
        // 将一个指向子类对象的父类引用转换成子类对象
        // 子类的对象 --> 父类的引用 --> 子类的对象
        // 需要对转换前的对象进行判断,判断两端的子类的对象必须是同一种类型才能转换
        // 这种转换称之为向下转型,必须通过判断确定是否可以转换
        // 通过操作符instanceof进行判断
        // 语法:父类变量名 instanceof 子类类型,值是一个布尔类型
        // ((Man)person).work();
        if (person instanceof Man) {
            Man man = (Man) person;
            man.work();
        } else {
            System.out.println("您不是一个男人,不需要工作");
        }

        Person person2 = new WoMan();
        if (person2 instanceof WoMan) {
            WoMan woMan = (WoMan) person2;
            woMan.shopping();
        } else {
            System.out.println("您不是一个女人,不能摆烂");
        }

    }
}
